package pe.com.bbva.targps.dao.impl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.com.bbva.targps.dao.DetalleArchivoEncarteGPSDAO;
import pe.com.bbva.targps.domain.DetalleArchivoEncarteGPS;
import pe.com.stefanini.core.dao.GenericDAOImpl;
import pe.com.stefanini.core.exceptions.DAOException;
import pe.com.stefanini.core.util.StringUtil;

@Service("detalleArchivoEncarteGPSDAO")
public class DetalleArchivoEncarteGPSDAOImpl extends GenericDAOImpl<DetalleArchivoEncarteGPS> implements DetalleArchivoEncarteGPSDAO{
	Logger logger = Logger.getLogger(this.getClass());
	@Autowired
	public DetalleArchivoEncarteGPSDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);
	}
	
	@Override
	public List<DetalleArchivoEncarteGPS> listaDetalleArchivoEncarteGPS() throws DAOException {


		Session hibernateSession = null;
		Connection con = null;
		CallableStatement cstmt = null;
		ResultSet rs = null;
		List<DetalleArchivoEncarteGPS> lista = new ArrayList<DetalleArchivoEncarteGPS>();
		DetalleArchivoEncarteGPS detalleArchivoGPS = null;
		try {
			hibernateSession = getHibernateTemplate()
					.getSessionFactory().openSession();
			con = hibernateSession.connection();
			cstmt =con.prepareCall("{call TARGPS.TARGPSPKG.PR_TARGPS_LISTA_DET_ENCARTE(?,?,?)}");
			cstmt.registerOutParameter(1, OracleTypes.CURSOR);
			cstmt.registerOutParameter(2, OracleTypes.INTEGER );
			cstmt.registerOutParameter(3, OracleTypes.VARCHAR );
			cstmt.executeQuery();
			rs = (ResultSet) cstmt.getObject(1);
			while (rs.next()) {
				detalleArchivoGPS = new DetalleArchivoEncarteGPS();
				detalleArchivoGPS.setFechaEnvio(rs.getString("FECHA_ENVIO"));
				detalleArchivoGPS.setMaterial(rs.getString("MATERIAL"));
				detalleArchivoGPS.setClaseMovimiento(rs.getString("CLASE_MOVIMIENTO"));
				detalleArchivoGPS.setCentroCosto(rs.getString("CENTRO_COSTO"));
				detalleArchivoGPS.setCantidad(rs.getString("CANT_TOTAL"));
				lista.add(detalleArchivoGPS);
			}
		} catch (HibernateException e) {
			logger.info(StringUtil.getStackTrace(e));
			throw new DAOException(e.getMessage());
		} catch (SQLException e) {
			logger.info(StringUtil.getStackTrace(e));
			throw new DAOException(e.getMessage());
		} catch (Exception e) {
			logger.info(StringUtil.getStackTrace(e));
			throw new DAOException(e.getMessage());
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (cstmt != null) {
					cstmt.close();
				}
				if (con != null) {
					con.close();
				}
				hibernateSession.close();
			} catch (SQLException e) {
				logger.info(StringUtil.getStackTrace(e));
				throw new DAOException(e.getMessage());
			} catch (HibernateException e) {
				logger.info(StringUtil.getStackTrace(e));
				throw new DAOException(e.getMessage());
			}
		}
		return lista;
	
	
	}
	

	
}